#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5+5;
int arr[maxn];
int idx; // 一直变化的时间戳
int dfn[maxn]; // 表示时间戳, 表示第几 步(秒) 走到这个位置
int min_dfn; // 最小时间戳, 防止走到之前的环里面
int ans;

void dfs(int i){
	dfn[i] = ++ idx; // 记录时间
	if (dfn[arr[i]] && dfn[arr[i]] >= min_dfn) {
		// 之前走过, 且有效
		ans = max(ans, dfn[i]-dfn[arr[i]]+1);
		return;
	}
	// 之前没走过, 或者说无效
	dfs(arr[i]);
}

void solve(){
	int n;
	cin >> n;
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
	}
	for (int i=1;i<=n;i++) {
		min_dfn = idx+1; // 设置最小时间戳
		if (!dfn[i]) {
			// 没有时间戳, 表示没有被遍历过, 再开始遍历
			dfs(i);
		}
	}
	cout << ans << '\n';
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
